
        <html>
			<head>
			     <title>你以为服务器关了这事就结束了？ -  XcodeGhost截胡攻击和服务端的复现，以及UnityGhost预警 - 蒸米</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/papers/9024">http://drops.wooyun.org/papers/9024</a></h1>
				
      <p>
        <p>作者：没羽，蒸米，阿刻，迅迪 @ 阿里移动安全</p>

<h1>0x00 序</h1>

<hr />

<p>截胡，麻将术语，指的是某一位玩家打出一张牌后，此时如果多人要胡这张牌，那么按照逆时针顺序只有最近的人算胡，其他的不能算胡。现也引申意为断别人财路，在别人快成功的时候抢走了别人的胜利果实。</p>

<p>虽然XcodeGhost作者的服务器关闭了，但是受感染的app的行为还在，这些app依然孜孜不倦的向服务器（比如init.icloud-analysis.com，init.icloud-diagnostics.com等）发送着请求。这时候黑客只要使用DNS劫持或者污染技术，声称自己的服务器就是”init.icloud-analysis.com”，就可以成功的控制这些受感染的app。具体能干什么能，请看我们的详细分析。</p>

<p>另外，有证据表明unity 4.6.4 – unity 5.1.1的开发工具也受到了污染，并且行为与XcodeGhost一致，更恐怖的是，还有证据证明XcodeGhost作者依然逍遥法外，具体内容请查看第三节。</p>

<p>PS：虽然涅槃团队已经发出过攻击的demo了<a href="http://static.wooyun.org//drops/20150921/2015092119174834335.png">2</a>，但很多细节并没有公布。所以我们打算在这篇文章中给出更加详细的分析过程供大家参考。</p>

<!--more-->

<h1>0x01通信协议分析</h1>

<hr />

<p>在受感染的客户端App代码中，有个Response方法用于接收和处理远程服务器指令。</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119174769372.png" alt="enter image description here" /></p>

<p>Response方法中根据服务器下发的不同数据，解析成不同的命令执行，根据我们分析，此样本大致支持4种远程命令，分别是：设置sleep时长、窗口消息、url scheme、appStore窗口。</p>

<p>通过4种远程命令的单独或组合使用可以产生多种攻击方式：比如下载安装企业证书的App；弹AppStore的应用进行应用推广；弹钓鱼页面进一步窃取用户信息；如果用户手机中存在某url scheme漏洞，还可以进行url scheme攻击等。</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119174834335.png" alt="enter image description here" /></p>

<p>其通信协议是基于http协议的，在传输前用DES算法加密http body。Response方法拿到服务器下发送的数据后，调用Decrypt方法进行解密：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119174965319.png" alt="enter image description here" /></p>

<p>如果解密成功，将解密后的数据转换成JSON格式数据：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175086338.png" alt="enter image description here" /></p>

<p>然后判断服务器端下发的数据，执行不同的操作。如下面截图是设置客户端请求服务端器sleep时长的操作：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175064875.png" alt="enter image description here" /></p>

<h1>0x2恶意行为分析及还原</h1>

<hr />

<p>在逆向了该样本的远程控制代码后，我们还原了其服务端代码，进一步分析其潜在的危害。</p>

<p>首先我们在服务端可以打印出Request的数据，如下图：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175178716.png" alt="enter image description here" /></p>

<p>红色框标记的协议的头部部分，前4字节为报文长度，第二个2字节为命令长度，最后一个2字节为版本信息，紧跟着头部的为DES的加密数据。我们在服务端将数据解密后显示为：</p>

<p><img src="http://static.wooyun.org//drops/20150922/2015092213161855336.jpg" alt="enter image description here" /></p>

<p>这里有收集客户端信息上传到控制服务器。</p>

<p>同样我们返回加密数据给客户端：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175213906.png" alt="enter image description here" /></p>

<p>明文信息为：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175296137.png" alt="enter image description here" /></p>

<p>客户端根据App的运行状态向服务端提供用户信息，然后控制服务器根据不同的状态返回控制数据：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175254212.png" alt="enter image description here" /></p>

<h2>恶意行为一 定向在客户端弹（诈骗）消息</h2>

<p>该样本先判断服务端下发的数据，如果同时在在“alertHeader”、“alertBody”、“appID”、“cancelTitle”、“confirmTitle”、“scheme”字段，则调用UIAlertView在客户端弹框显示消息窗口：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175362561.png" alt="enter image description here" /></p>

<p>消息的标题、内容由服务端控制</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175464671.png" alt="enter image description here" /></p>

<p>客户端启动受感染的App后，弹出如下页面：</p>

<p><img src="http://drops.wooyun.org/wp-content/uploads/2015/09/mi233.jpg" height="200" width="300" /></img></p>

<h2>恶意行为二 下载企业证书签名的App</h2>

<p>当服务端下发的数据同时包含“configUrl”、“scheme”字段时，客户端调用Show()方法，Show()方法中调用UIApplication.openURL()方法访问configUrl：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175578656.png" alt="enter image description here" /></p>

<p>通过在服务端配置configUrl，达到下载安装企业证书App的目的：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175530888.png" alt="enter image description here" /></p>

<p>客户端启动受感染的App后，目标App将被安装(注意:演示应用为测试应用，不代表恶意软件推广该应用)：</p>

<p><img src="http://drops.wooyun.org/wp-content/uploads/2015/09/000mi.jpg" height="200" width="300" /></img></p>

<p><img src="http://drops.wooyun.org/wp-content/uploads/2015/09/mi02.jpg" height="200" width="300" /></img></p>

<p>demo地址：http://v.youku.com/v&#95;show/id&#95;XMTM0Mjg0MDc4OA==.html</p>

<p><embed src="http://player.youku.com/player.php/sid/XMTM0Mjg0MDc4OA==/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash">
</embed></p>

<h2>恶意行为三 推送钓鱼页面</h2>

<p>通过在服务端配置configUrl，达到推送钓鱼页面的目的：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175629488.png" alt="enter image description here" /></p>

<p>客户端启动受感染的App后，钓鱼页面被显示：</p>

<p><img src="http://drops.wooyun.org/wp-content/uploads/2015/09/image037.png" height="200" width="300" /></img></p>

<p>demo地址：http://v.youku.com/v&#95;show/id&#95;XMTM0Mjg0NTM2NA==.html</p>

<p><embed src="http://player.youku.com/player.php/sid/XMTM0Mjg0NTM2NA==/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash">
</embed></p>

<h2>恶意行为四 推广AppStore中的应用</h2>

<p>通过在服务端配置configUrl，达到推广AppStore中的某些应用的目的：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175630316.png" alt="enter image description here" /></p>

<p>phishing1.html页面内容：</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175644309.png" alt="enter image description here" /></p>

<p>客户端启动受感染的App后，自动启动AppStore，并显示目标App的下载页面：</p>

<p><img src="http://drops.wooyun.org/wp-content/uploads/2015/09/image043.png" height="200" width="300" /></img></p>

<p>demo地址：http://v.youku.com/v&#95;show/id&#95;XMTM0Mjg0NDA4MA==.html</p>

<p><embed src="http://player.youku.com/player.php/sid/XMTM0Mjg0NDA4MA==/v.swf" allowFullScreen="true" quality="high" width="480" height="400" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash">
</embed></p>

<h1>0x03 UnityGhost?</h1>

<hr />

<p>在大家以为一切都完结的时候，百度安全实验室称已经确认”Unity-4.X的感染样本”。并且逻辑行为和XcodeGhost一致，只是上线域名变成了init.icloud-diagnostics.com。这意味，凡是用过被感染的Unity的app都有窃取隐私和推送广告等恶意行为。</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175713545.png" alt="enter image description here" /></p>

<p>Unity是由Unity Technologies开发的一个让玩家创建诸如三维视频游戏、实时三维动画等类型互动内容的多平台的综合型游戏开发工具，是一个全面整合的专业游戏引擎。很多有名的手机游戏比如神庙逃亡，纪念碑谷，炉石传说都是用unity进行开发的。</p>

<p>更令人恐怖的是，在百度安全实验室确认后没多久，大家就开始在网上寻找被感染的Unity工具，结果在我搜到一个Unity3D下载帖子的时候发现”codeFun与2015-09-22 01:18编辑了帖子”！？要知道codeFun就是那个自称XcodeGhost作者的人啊。他竟然也一直没睡，大半夜里一直在看大家发微博观察动静？随后发现大家知道了Unity也中毒的事情，赶紧去把自己曾经投毒的帖子删了？</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175791592.jpg" alt="enter image description here" /></p>

<p>现在再去看那个帖子已经被作者删的没有任何内容了。。。 http://game.ceeger.com/forum/read.php?tid=21630&amp;fid=8</p>

<p><img src="http://static.wooyun.org//drops/20150921/2015092119175796091.png" alt="enter image description here" /></p>

<p>但根据XcodeGhost作者没删之前的截图表明，从unity 4.6.4 – unity 5.1.1的开发工具都有可能被投毒了！</p>

<h1>0x04 总结</h1>

<hr />

<p>虽然病毒作者声称并没有进行任何广告或者欺诈行为，但不代表别人不会代替病毒作者进行这些恶意行为。并且作者依然还在逍遥法外！所以立刻！马上！删掉那些中毒的app吧！</p>

<h1>0x05 参考资料</h1>

<hr />

<ol>
<li>涅槃团队：Xcode幽灵病毒存在恶意下发木马行为 http://drops.wooyun.org/papers/8973</li>
<li>XcodeGhost 源码 https://github.com/XcodeGhostSource/XcodeGhost</li>
</ol>

<h1>0x06 更新</h1>

<hr />

<p>1 在百度安全实验室的帮助下，我们已经拿到了UnityGhost的样本。基本信息如下：</p>

<pre><code>$shasum libiPhone-lib-il2cpp.a-armv7-master.o
625ad3824ea59db2f3a8cd124fb671e47740d3bd  libiPhone-lib-il2cpp.a-armv7-master.o

$ file libiPhone-lib-il2cpp.a-armv7-master.o
libiPhone-lib-il2cpp.a-armv7-master.o: Mach-O object arm
</code></pre>

<p>UnityGhost样本的行为和XcodeGhost非常相似，基本函数如下：</p>

<p><img src="http://static.wooyun.org/drops/20150922/2015092201525847399gimage1.png" alt="enter image description here" /></p>

<p>UnityGhost在启动时会检测是否是在虚拟机和调试器中运行，如果是则不产生恶意行为：</p>

<p><img src="http://static.wooyun.org/drops/20150922/2015092201530955481gimage2.png" alt="enter image description here" /></p>

<p>UnityGhost同样也会收集用户手机的各种信息（时间，bundle id(包名)，应用名称，系统版本，语言，国家等）并上传到一个新的服务器”http://init.icloud-diagnostics.com”：</p>

<p><img src="http://static.wooyun.org//drops/20150922/2015092201531936727gimage3.png" height="338" width="300" /></p>

<p><img src="http://static.wooyun.org/drops/20150922/2015092201533434520gimage4.png" alt="enter image description here" /></p>

<p>在接收到服务器返回的指令后，UnityGhost同样也可以进行多种恶意行为：下载安装企业证书的App；弹AppStore的应用进行应用推广；弹钓鱼页面进一步窃取用户信息；如果用户手机中存在某url scheme漏洞，还可以进行url scheme攻击等。 弹出诈骗对话框用到的函数：</p>

<p><img src="http://static.wooyun.org//drops/20150922/2015092202334940664gimage5.png" alt="enter image description here" /></p>

<p>弹出网页或者推广应用用到的函数：</p>

<p><img src="http://static.wooyun.org//drops/20150922/2015092202335623558gimage6.png" alt="enter image description here" /></p>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          